home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 10
/
The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso
/
PC_SIGCD
/
05
/
6
/
DISK0564.ZIP
/
SOURCE.ARC
/
ASM.ARC
/
CONVERT.ASM
< prev
next >
Wrap
Assembly Source File
|
1987-11-05
|
3KB
|
125 lines
TITLE CONVERSION ROUTINES
; LAST MODIFIED 04-OCT-86
.XLIST
INCLUDE ASCII.DEF
.LIST
DOSSEG
.MODEL SMALL
.DATA?
TEMPSTOR DB 5 DUP(?)
.CODE
EXTRN COUT:NEAR
PUBLIC BTODEC, DTOBIN, DECOUT
; BTODEC - CONVERT BINARY TO DECIMAL
; ENTRY: (AX) = BINARY WORD
; (BX) = ADDRESS FOR DECIMAL DIGITS
; USES: AX,BX,CX,DX
;
BTODEC PROC NEAR
MOV CX,10000
BTOD1:
PUSH CX
MOV DL,"0"
SUBMORE:
SUB AX,CX
INC DL
JNB SUBMORE
DEC DL
ADD AX,CX
MOV [BX],DL
INC BX
POP CX
PUSH AX
PUSH BX
MOV AX,CX
MOV BX,10
MOV DX,0
DIV BX
POP BX
MOV CX,AX
CMP CX,0
POP AX
JNE BTOD1
RET
BTODEC ENDP
; DECOUT = OUTPUT DECIMAL NUMBER TO CONSOLE
; ENTRY: BX = NUMBER (IN BINARY)
; CX = FIELD WIDTH
; AL = CHAR. TO USE INSTEAD OF LEADING "0"
; (0 TO SUPPRESS LEADING 0'S)
;
DECOUT PROC NEAR
PUSH AX
MOV AX,BX
MOV BX,OFFSET TEMPSTOR
PUSH CX
CALL BTODEC
POP CX
POP AX
MOV BX,OFFSET TEMPSTOR+5
SUB BX,CX
CMP CX,1
JLE SHOWDEC
DEC CX
ZEROSUP:
MOV DL,[BX+0]
CMP DL,"0"
JNZ SHORT DONESUP
AND AL,AL
JZ SUP0
CALL COUT
SUP0:
INC BX
LOOP ZEROSUP
DONESUP:
INC CX
SHOWDEC:
MOV AL,[BX]
CALL COUT
INC BX
LOOP SHOWDEC
RET
DECOUT ENDP
; DTOBIN = CONVERT DECIMAL TO BINARY
; ENTRY: BX POINTS TO DECIMAL DIGIT (MSD)
; CX HOLDS NUMBER OF DIGITS (5 MAX.)
; EXIT: 'C'=1 IF OVERFLOW OR ILLEGAL CHAR. IN DIGIT STRING
; AX = RESULT OF CONVERSION
;
DTOBIN PROC NEAR
MOV DX,0 ;ACCUMULATOR FOR RESULT
DTOB1: MOV AL,[BX+0]
SUB AL,"0"
JB SHORT BADCHAR
CMP AL,10
JGE SHORT BADCHAR
PUSH AX
INC BX
PUSH BX
MOV AX,DX
MOV BX,10
MUL BX
POP BX
JC SHORT OVFLOW ;IF >65535
MOV DX,AX
POP AX
MOV AH,0
ADD DX,AX
LOOP DTOB1
MOV AX,DX
CLC
RET
OVFLOW:
BADCHAR:
STC
RET
DTOBIN ENDP
END